#ifndef INTERPRETER_H
#define INTERPRETER_H

#include <map>
#include <string>
#include "UmlExt.h"

namespace GOAL
{
  class Context
  {
  public:
    Udm::Object get (const std::string &symbol);
    void set (const std::string &symbol, const Udm::Object& object);
  private:
    std::map <std::string, Udm::Object> symbols_;
  };

  class Interpreter
  {
  public:
    Interpreter ();
    ~Interpreter ();

    // since UDM programmers didn't program polymorphism into
    // the generated code, I'm building up a derived lookup so
    // I can quickly discern sub class relationships.
  private:
    Context context_;
    static bool initialized_;
    static std::map <Uml::Class,Uml::Class> derived_;
  };
}


#endif // INTREPRETER_H